#ifndef COMANDOS_H
#define COMANDOS_H

#include <stdio.h>
#include "imagem.h"
#include "boolean.h"

/* NAO ALTERAR ESTE ARQUIVO */

/* Carrega o arquivo filename e devolve a estrutura Image em img.
 * Retorna false se nao for possivel carregar a imagem, true c.c. */
boolean comando_carrega_imagem(char *filename, Image **img);

/* Imprime a imagem img no formato PGM P2.
 * Retorna false se nao for possivel imprimir a imagem, true c.c. */
boolean comando_imprime_imagem(Image *img);
boolean comando_movimenta_imagem(Image *img);

/* Libera a imagem da memoria.
 * Apos liberar a memoria com sucesso, a variavel *img deve apontar
 * para NULL.
 * Retorna false se a imagem for invalida e nao for possivel liberar
 * a memoria, true c.c. */
boolean comando_libera_imagem(Image **img);

/* Imprime o histograma normalizado da imagem, com precisao
 * de 4 casas decimais (%.4f). Os valores devem ser separados por
 * um espaco em branco.
 * Retorna false se nao for possivel calcular o histograma, true c.c. */
boolean comando_imprime_histograma(Image *img);

/* Imprime o histograma normalizado acumulado da imagem, com
 * precisao de 4 casas decimais (%.4f). Os valores devem ser
 * separados por um espaco em branco.
 * Retorna false se nao for possivel calcular o histograma, true c.c. */
boolean comando_imprime_histograma_acumulado(Image *img);

/* Equaliza o histograma da imagem.
 * Retorna false se nao for possivel equalizar o histograma, true c.c. */
boolean comando_equaliza_histograma(Image *img);

/* Calcula o negativo da imagem.
 * Retorna false se nao for possivel calcular o negativo, true c.c. */
boolean comando_negativo_imagem(Image *img);

/* Limiariza a imagem.
 * Retorna false se nao for possivel limiarizar a imagem, true c.c. */
boolean comando_limiariza_imagem(Image *img, int thr);

/* Imprime o valor medio de brilho da imagem, usando precisao
 * de quatro casas decimais (%.4f).
 * Retorna false se nao for possivel calcular a media, true c.c. */
boolean comando_media_brilho(Image *img);

/* Recorta um retangulo indicado pelas posicoes (x0,y0) no canto
 * superior esquerdo e (x1,y1) no canto inferior direiro. A
 * variavel *img devera apontar para a nova imagem.
 * Retorna false se nao for possivel recortar um retangulo, true c.c. */
boolean comando_recorta_retangulo(Image **img, int x0, int y0,
				  int x1, int y1);

#endif
